import json

 # json 是通过轻量级的数据交换的格式，读写内容非常容易，占用空间小，
 #   纯文本格式，可以理解为一段字符串。
 # 常用的编辑语言都支持json ， 大多数据库导入导出多支持json
 # json 支持的数据类型
    # 对象 : 用{}表示对象，里面是键值对表示属性，属性用逗号分割
    # 数组： 用【】表示数组，逗号分隔
    # 字符串 ： 用 “” 表示字符串，josn中只能用双引号
    # 数字 ： 整小数都可以，直接写数字，不需要任何符号
    # 布尔值 ： ，直接写，不需要任何数字，要小写：false，true
    # 空值 ： null



# 任何的对象都可以转换为json格式的数据，json一般应用的场景
    # 保存对象的状态。用于休眠，分布式系统开发时远程调用传递对象
    # 配置文件使用json格式
    # 信息系统的开发用前后端数据交互


# pytnon对象与json字符串互换
    # 使用json要引入模块

    # json字符串转python对象（dict），用loads（）

    # python对象转json字符串，要用



json_str = '''
    {"name": "xiaoming",
    "age":22
    }
'''

py_obj = json.loads(json_str)
print(py_obj)
print(type(py_obj))
print(py_obj.get('name'))


# ========python转json字符串===============
# 不能用集合直接转，会被认为是字典
dict1 = {}
dict1['name'] = '小文'
dict1['age'] = 22
dict1['habby'] = ('ge','qiu')
dict1['money'] = None
dict1['adder'] = {'city':'gz','postcode':522200}
# 输出json的转换内容
json_str = json.dumps(dict1)
print(json_str)
# 输出原内容
print(json.loads(json_str))


# ==============读写json的文件==================
# 主要用dump（） ， load（） 两种方法

# ========写入json文件==============
dict1 = {}
# 写入信息到列表中
dict1['name'] = '小文'
dict1['age'] = 22
dict1['habby'] = ('ge','qiu')
dict1['money'] = None
dict1['adder'] = {'city':'gz','postcode':522200}
# 创造、打开并写入文件
with open('student.json','w',encoding='utf-8') as f1:
    # 把python对象转为字符串，并写入文件  dump（）方法
    json.dump(dict1,f1)

# 编码最好一样，默认为 utf-8 存入中文是不会出现乱码，gb2356中文时会出现乱码
# =========读取json文件===============
with open('student.json','r',encoding='utf-8') as f2:
    # 读取内容转字典并赋值（即python对象）
    py_obs = json.load(f2)
    # 显示转化的python对象文件
    print(py_obs)


